package com.sync.syncmasterdata.product.service.convert;

import com.sync.syncmasterdata.product.pojo.bip.ProductForBip;
import com.sync.syncmasterdata.product.pojo.bip.ProductStockForBip;
import com.sync.syncmasterdata.product.pojo.erp.InventoryForU8;
import com.sync.syncmasterdata.product.pojo.oa.InventoryForOA;
import com.sync.syncmasterdata.product.service.ConvertInterface;
import com.sync.syncmasterdata.util.BipRequestUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * oa产品对象 转 Bip对象
 */
@Service
public class ProductOAToBip implements ConvertInterface<InventoryForOA, ProductForBip> {

    public ProductForBip convertTo(InventoryForOA oa) {
        //物料详情
        ProductForBip.ProductBill.ProductBillHead billHead=new ProductForBip.ProductBill.ProductBillHead();
        //辅助单位
        ProductForBip.ProductBill.ProductMaterialConvert.ProductMaterialConvertItem productMaterialConvertItem = new ProductForBip.ProductBill.ProductMaterialConvert.ProductMaterialConvertItem();

        /**
         * 物料编码 自动生成 集团统一物料编码 todo:临时使用 U8生成编码 等待
         */
        billHead.setCode(oa.getCunhuobm());
        /**
         * 产品名称
         */
        billHead.setName(oa.getChanpinmc());
        /**
         * 产品货号 todo:没有位置
         */
//        u8.setInvaddCode(oa.getHuohao());
        /**
         * 主要供应商 todo:没有位置
         */
//        u8.setMain_supplier(oa.getShengchanqy());
        /**
         * 产品规格
         */
        billHead.setMaterialspec(oa.getGuigexh());
        /**
         * 产品类别 ( FW,JC,SJ.....) todo:要保证分类和BIP中分类一样
         */
        billHead.setPk_marbasclass(oa.getChanpinlx());
        /**
         * 主单位 todo:保持oa和bip中数据一样
         */
        billHead.setPk_measdoc(oa.getZhujildw());
        /**
         * 生产企业文本 todo:自定义档案 参照:杰毅bpm代码
         */
//        u8.setEnterprise(oa.getShengchanqywb());
        /**
         * 品牌 todo:自定义档案 参照:杰毅bpm代码
         */
//        u8.setSelf_define5(oa.getPinpaiwb());
        /**
         * 是否医疗器械 todo:自定义档案 仿枚举 oa的下拉要改
         */
//        u8.setSelf_define2(shifouylqx(oa.getShifouylqx()));
        billHead.setDef10(typeMedical(oa.getShifouylqx()));
        /**
         * 业务类型 todo:没有位置
         */
//        u8.setCidefine2(oa.getChanpinx());
        /**
         * 产品线 todo:没有位置
         */
//        u8.setCidefine3(oa.getChanpinx());
        /**
         * 产品组 todo:没有位置
         */
//        u8.setCidefine4(oa.getChanpinz());
        /**
         * 项目名称 todo:没有位置
         */
//        u8.setCidefine5(oa.getXiangmumcwb());

        /**
         * 标准化处理辅助计量 对象 todo:如果有问题再调整
         */
        productMaterialConvertItem.setMeasrate(oa.getZhujildw());
        productMaterialConvertItem.setPk_measdoc(oa.getZhujildw());
        productMaterialConvertItem.setMeasrate("1/1");

        //勾选区调整
        //FW开头的,不需要生产耗材,需要 应税劳务
        if (oa.getChanpinlx().contains("FW02") || oa.getChanpinlx().contains("FW03") || oa.getChanpinlx().contains("FW04") || oa.getChanpinlx().contains("FW05") || oa.getChanpinlx().contains("FW06") || oa.getChanpinlx().contains("FW07") || oa.getChanpinlx().contains("FW08")) {
            //todo:没有找到对应的 勾选字段 只找到一个服务类
//            billHead.setFee("Y");
        }

        /**
         *  以下为默认仓库的字段配置信息 todo:没有位置
         */
//        if (oa.getChanpinlx().contains("JC")) {
//            u8.setDefwarehouse("05");
//            u8.setDefwarehousename("检测项目库");
//        } else {
//            u8.setDefwarehouse("01");
//            u8.setDefwarehousename("总库");
//        }

        /**
         * 仓库的特殊处理 自由项的处理(仓库勾选) 仓库+FW的分类,不需要自由项 增加类型为JC的判断
         */
//        if ("检测项目库".equals(oa.getKuwei()) || "医疗器械库".equals(oa.getKuwei()) || "项目仓库".equals(oa.getKuwei()) || "外库".equals(oa.getKuwei()) || (oa.getChanpinlx().contains("FW")) || (oa.getChanpinlx().contains("JC"))) {
//            u8.setSelf_define4("");
//            u8.setBconsiderfreestock(0);
//            u8.setBcontrolfreerange1(0);
//            u8.setFree_item1(0);
//        } else {
//            u8.setSelf_define4(oa.getKuwei());
//            u8.setBconsiderfreestock(1);
//            u8.setBcontrolfreerange1(1);
//            u8.setFree_item1(1);
//        }

        //对象封装
        ProductForBip.ProductBill.ProductMaterialConvert productMaterialConvert= ProductForBip.ProductBill.ProductMaterialConvert.builder().item(Arrays.asList(productMaterialConvertItem)).build();
        ProductForBip.ProductBill productBill=ProductForBip.ProductBill.builder().billhead(billHead).build();
        ProductForBip product = ProductForBip.builder().bill(productBill).build();

        return product;
    }

    /**
     * 更新erp 产品记录用 add成功后 在处理
     *
     * @param oa
     * @return
     */
    public InventoryForU8 convertToForUpdate(InventoryForOA oa) {
        InventoryForU8 u8 = new InventoryForU8();
        /**
         * 通用名称
         */
        u8.setCurrencyName(oa.getTongyongmc());
        /**
         * 存货编码 （更新必填）
         */
        u8.setCode(oa.getCunhuobm());
        /**
         * 产品名称
         */
        u8.setName(oa.getChanpinmc());
        /**
         * 产品货号
         */
        u8.setInvaddCode(oa.getHuohao());
        /**
         * 主要供应商(U8要编码)
         */
        u8.setMain_supplier(oa.getShengchanqy());
        /**
         * 主计量单位
         */
        u8.setMain_measure(oa.getZhujildw());
        //如果主计量单位为空 大概率为修改
        if (StringUtils.isBlank(oa.getZhujildw())) {
            u8.setUnitgroup_code(null);
            u8.setUnitgroup_name(null);
        }


        /**
         * 产品规格
         */
        u8.setSpecs(oa.getGuigexh());

        /**
         * 生产企业文本
         */
        u8.setEnterprise(oa.getShengchanqywb());
        /**
         * 品牌
         */
        u8.setSelf_define5(oa.getPinpaiwb());
        /**
         * 是否医疗器械
         */
        u8.setSelf_define2(typeMedical(oa.getShifouylqx()));

        /**
         * 业务类型
         */
        u8.setCidefine2(oa.getChanpinx());
        /**
         * 产品线
         */
        u8.setCidefine3(oa.getChanpinx());
        /**
         * 产品组
         */
        u8.setCidefine4(oa.getChanpinz());
        /**
         * 项目名称
         */
        u8.setCidefine5(oa.getXiangmumcwb());

        /**
         * 仓库的特殊处理 自由项的处理(仓库勾选)
         */
        if ("检测项目库".equals(oa.getKuwei()) || "医疗器械库".equals(oa.getKuwei()) || "项目仓库".equals(oa.getKuwei()) || "外库".equals(oa.getKuwei())) {
            u8.setSelf_define4("");
            u8.setBconsiderfreestock(0);
            u8.setBcontrolfreerange1(0);
            u8.setFree_item1(0);
        } else {
            u8.setSelf_define4(oa.getKuwei());
            u8.setBconsiderfreestock(1);
            u8.setBcontrolfreerange1(1);
            u8.setFree_item1(1);
        }

        /**
         * 增加更新时的货位确定
         */
        if (oa.getCunhuobm().contains("JC")) {
            u8.setDefwarehouse("05");
            u8.setDefwarehousename("检测项目库");
        } else {
            u8.setDefwarehouse("01");
            u8.setDefwarehousename("总库");
        }

        /**
         * 是否国产
         */
        //勾选区
        u8.setBImport(oa.getGuochanjk());
        return u8;
    }

    /**
     * 是否医疗器械转换
     *
     * @return
     */
    private String typeMedical(Integer x) {
        try {
            switch (x){
                case 0:
                    return "一类";
                case 1:
                    return "二类";
                case 2:
                    return "三类";
                case 3:
                    return "非医疗";
                default:
                    return "非医疗";
            }
        } catch (Exception exception) {
            exception.printStackTrace();
            return "非医疗";
        }
    }

    /**
     * 根据类别获取 u8 该类别中最后一个可用编码
     */
    private String getLastCode(String lb) {
        return null;
    }


}
